package com.ganjiangps.huochetou.common;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.bind.annotation.ModelAttribute;

import com.ganjiangps.huochetou.model.SuperEntity;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

public class BaseController<Entity extends SuperEntity<Entity>> {

	// public static Log logger = LogFactory.getLog(BaseController.class);
	protected HttpSession session;
	protected HttpServletRequest request;
	protected HttpServletResponse response;
	protected SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	protected SimpleDateFormat sf1 = new SimpleDateFormat("yyyyMMdd");
	protected SimpleDateFormat sf2 = new SimpleDateFormat("yyyy-MM-dd");
	protected static DecimalFormat df = new DecimalFormat("###,###,###,###,##0.00");
	protected static DecimalFormat df1 = new DecimalFormat("##########0.00");

	@ModelAttribute
	public void setReqAndRes(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
		this.response = response;
		this.request = request;
		this.session = session;
	}

	protected void initPage(Map<String, Object> map, String pageNum, String pageSize) {
		Integer num = 1;
		Integer size = 20;

		if (pageNum != null && !"".equals(pageNum)) {
			num = Integer.parseInt(pageNum);

		}
		if (pageSize != null && !"".equals(pageSize)) {
			size = Integer.parseInt(pageSize);

		}

		PageHelper.startPage(num, size);

		map.put("pageSize", size);

	}

	protected PageInfo<Object> initPagehelper(Map map, List list) {

		PageInfo<Object> pagehelper = new PageInfo<>(list);

		pagehelper.setFirstPage(1);

		Integer lastPageNum = 0;

		Integer size = (Integer) map.get("pageSize");

		if (pagehelper.getTotal() % size == 0) {
			lastPageNum = (int) (pagehelper.getTotal() / size);

		} else {
			lastPageNum = (int) (pagehelper.getTotal() / size + 1);
		}

		pagehelper.setLastPage(lastPageNum);

		return pagehelper;

	}

	/**
	 * 通过JSON向前台发送数据
	 *
	 * @param data
	 * @throws IOException
	 */
	// protected void sendJsonData(HttpServletResponse response, String data)
	// throws Exception {
	// response.setContentType("text/html;charset=UTF-8");
	// PrintWriter out = response.getWriter();
	// out.println(data);
	// out.flush();
	// out.close();
	// }

	/**
	 * 设置Cookie
	 *
	 * @return
	 */
	// public String setCookie() {
	// /* request.setAttribute("cookieName", ); */
	// String regcookie = StringUtil.getCookieValue(request);
	// if (StringUtil.isNull(regcookie)) {
	// StringUtil.addCookie(response, request);
	//
	// }
	// return regcookie;
	// }

	/**
	 * 得到要操作的日志对象
	 * 
	 * @param @return
	 * @param status
	 *            操作状态 0失败 1成功
	 * @param bizType
	 *            业务类型 添加1，修改2，删除3，查询4，5其他
	 * @param userType
	 *            用户类型 1 管理员 2普通用户
	 * @param entity
	 *            操作的实体类,删除需要把删除之前的对象传入,新增需要把新增的对象传入这个参数
	 * @param entity2
	 *            操作的实体类,这个主要针对修改,这个是修改之后的对象,修改之前的对象存入entity中
	 * @return LogOperation
	 * @author jiangxueyou
	 * @return
	 */

	/**
	 * 
	 * @param @param
	 *            mark
	 * @param status
	 *            操作状态 0失败 1成功
	 * @param bizType
	 *            业务类型 添加1，修改2，删除3，查询4，5其他
	 * @param userType
	 *            用户类型 1 管理员 2普通用户
	 * @param @param
	 *            before 修改前的对象
	 * @param @param
	 *            after 修改后的对象
	 * @param @return
	 * @return Map<String,Object>
	 * @author jiangxueyou
	 */
	// public Map<String, Object> getLogOperationMap(String status, String
	// bizType, String userType, Entity before,
	// Entity after, String mark) {
	// Map<String, Object> maps = new HashMap<>();
	// maps.put("status", status);
	// maps.put("mark", mark);
	// maps.put("bizType", bizType);
	// maps.put("userType", userType);
	// maps.put("before", before);
	// maps.put("after", after);
	// return maps;
	// }

	/**
	 * 得到要操作的日志对象
	 * 
	 * @param @return
	 * @param status
	 *            操作状态 0失败 1成功
	 * @param bizType
	 *            业务类型 添加1，修改2，删除3，查询4，5其他
	 * @param userType
	 *            用户类型 1 管理员 2普通用户
	 * @param entity
	 *            操作的实体类,删除需要把删除之前的对象传入,新增需要把新增的对象传入这个参数
	 * @param entity2
	 *            操作的实体类,这个主要针对修改,这个是修改之后的对象,修改之前的对象存入entity中
	 * @return LogOperation
	 * @author jiangxueyou
	 * @return
	 */

	// public boolean foxIP(String str) {
	// String regex = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\." +
	// "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
	// + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." +
	// "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
	// if (str.matches(regex)) {
	// return true;
	// }
	// return false;
	// }
	//
	// public static AdminUser getAdminUser() {
	// try {
	// Session session = SecurityUtils.getSubject().getSession();
	// return (AdminUser) session.getAttribute("userSession");
	// } catch (UnavailableSecurityManagerException e) {
	// return null;
	// } catch (Exception e) {
	// return null;
	// }
	// }

}
